package gorms

import (
	"context"
	"gorm.io/gorm"
)

var _db *gorm.DB

//func init() {
//	//配置MySQL连接参数
//	username := config.C().MysqlConfig.Username //账号
//	password := config.C().MysqlConfig.Password //密码
//	host := config.C().MysqlConfig.Host         //数据库地址，可以是Ip或者域名
//	port := config.C().MysqlConfig.Port         //数据库端口
//	Dbname := config.C().MysqlConfig.Db         //数据库名
//	dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8&parseTime=True&loc=Local", username, password, host, port, Dbname)
//	var err error
//	_db, err = gorm.Open(mysql.Open(dsn), &gorm.Config{
//		Logger: logger.Default.LogMode(logger.Info),
//	})
//	if err != nil {
//		panic("连接数据库失败, error=" + err.Error())
//	}
//}

// New
//
//	@Description: 创建有个新的连接对象,并获取其中的数据库连接
//	@return *GormConn
func New() *GormConn {
	return &GormConn{
		db: GetDB(),
	}
}

func GetDB() *gorm.DB {
	return _db
}

// GormConn
//
//	@Description:  Gorm连接: 包含db库连接, tx事务连接
type GormConn struct {
	db *gorm.DB
	tx *gorm.DB
}

// NewTran
//
//	@Description: 创建Gorm连接, db:数据库连接 tx:该数据连接的Begin()连接
//	@return *GormConn
func NewTran() *GormConn {
	return &GormConn{
		db: GetDB(),
		tx: GetDB().Begin(),
	}
}

func (g *GormConn) Session(ctx context.Context) *gorm.DB {
	return g.db.Session(&gorm.Session{Context: ctx})
}

func (g *GormConn) Begin() {
	g.tx = GetDB().Begin()
}

func (g *GormConn) Rollback() {
	g.tx.Rollback()
}

func (g *GormConn) Commit() {
	g.tx.Commit()
}

func (g *GormConn) Tx(ctx context.Context) *gorm.DB {
	return g.tx.WithContext(ctx)
}
